草庐IT

Android AsyncTask 内存泄漏

全部标签

c++ - 一种无需最大化内存即可实时缓冲高清视频的有效方法

我正在编写一个程序,涉及使用OpenCV实时处理来自网络摄像机的视频。我希望能够捕获(在处理过程中的任何时间)以前的图像(例如,十秒的值(value))并保存到视频文件中。我目前正在使用队列作为缓冲区(以推送“cv::Mat”数据)来执行此操作,但这显然效率不高,因为几秒钟的图像很快就会用完所有电脑内存。我尝试使用“cv::imencode”压缩图像,但使用PNG并没有太大区别,我需要一个使用硬盘驱动器内存且实时操作高效的解决方案。谁能提出一个非常简单有效的解决方案?编辑:只是为了让大家明白我此刻在做什么;这是10秒缓冲区的代码:voidrun(){cv::VideoCaptureca

c++ - 带堆内存的 glBuffer

我遇到了一个问题,我不确定如何正确处理。我最近开始为我的游戏创建一个粒子系统,并且一直在为我的粒子数据使用一个名为“Particle”的结构。'Particle'包含用于渲染的顶点信息。我遇到问题的原因是我将我的粒子结构集中在堆内存中以节省大量分配,但是我不确定如何在glBufferData中使用指针数组,我印象深刻glBufferData需要实际的结构实例而不是指向结构实例的指针。我知道我可以重建一个float组,每个渲染只是为了绘制我的粒子,但是是否有一个像glBufferData这样的OpenGL调用,我在某个地方丢失了它,它能够在它通过数据时取消引用我的指针我供应?理想情况下,

c++ - FFmpeg内存泄漏

我开发了一个简单的库,修改了我在Internet上找到的一个库。让我害怕的是,当我播放avi时,它会在视频结束时播放并释放内存,但是当我播放视频时,就像内存泄漏一样!虽然视频已经结束并且调用了FreeAll方法(删除上下文等的函数等),但它增长到138mb。这是导致内存泄漏的方法的代码:intVideoGL::NextVideoFrame(){intframeDone=0;intresult=0;doublepts=0;if(!this->ended){if(!_started)return0;AVPacket*packet;//Getthenumberofmillisecondspa

c++ - 如果新大小小于或等于旧大小,标准是否保证 std::string::resize 不会重新分配内存?

我需要经常将字符串设为空,然后在其中添加一些字符。std::string::clear()可能重新分配std::string::resize(0)是否重新分配?标准的话并没有引起任何注意。 最佳答案 我认为最好的答案是http://en.cppreference.com/w/cpp/string/basic_string/clear的“注释”部分.Unlikeforstd::vector::clear,theC++standarddoesnotexplicitlyrequirethatcapacityisunchangedbythi

c++ - 如何完全管理 std 容器(如 map)的堆内存分配?

我对使用多个stdmap很感兴趣,我希望它们都从一个公共(public)内存池中分配元素。根据我目前所读的内容,我可以使用自定义分配器(例如Boostpool_alloc)来实现这一点。我的问题是,尽管使用Boostpool_alloc之类的东西来管理元素本身的分配,stdmap是否仍会使用少量堆内存作为某种形式的容器开销,boostpool_alloc不会管理这些开销?我在考虑关于使用标准映射本身的指向元素的指针? 最佳答案 精简版map类型,例如:typedefstd::map,boost::pool_allocator>>AM

C++析构函数删除共享内存

我有一个用C++编写的程序,它执行以下操作:获取一个未排序的整数数组,并按升序将其分成子数组。例如。我的数组是1,2,3,-2,4所以输出将是:1,2,3//子数组1-2,4//子数组2我要求的方法是分配指针数组,该数组中的每个单元格将指向包含一个系列的子数组(也是动态分配的)。另外,我不允许更改“主要”功能现在,我有了使用运算符重载打印子数组的“打印”方法。我检查并发现print方法工作正常,但在这段代码中:coutprint(s3)打印正常,但是在赋值运算符之后再次调用print(s3)时,我得到了垃圾输出。经过一些调试后,我认为它与析构函数有关。如果有人能指出并确定我的问题并提供

Mac OSX 上的 c++ 内存泄漏检测

我正在用c++编写代码,使用textwrangler编写代码并使用命令行中的g++编译它。我希望能够检测我的代码是否有任何内存泄漏。我尝试过使用valgrind,但它似乎不适合特立独行者,我尝试运行“leaka.out”,其中a.out是运行“g++*.h*.cc”的结果,但我收到错误消息“leaks”找不到您有权访问的名称类似于“a.out”的进程“关于如何进行内存泄漏检查的任何想法?这是输出==1317==Memcheck,amemoryerrordetector==1317==Copyright(C)2002-2012,andGNUGPL'd,byJulianSewardetal

c++ - 在一个循环中证明内存访问

我有以下功能:voidikj(float(*a)[N],float(*b)[N],float(*c)[N],intn){inti,j,k;floatr;papi_start();for(i=0;i我正在使用PAPI来计算在papi_start()和papi_stop()之间我有多少加载和存储以及结果我有以下内容:加载(使用PAPI_LD_INS):322678164205053128160607725612714815512101189551102480740695020486450848188商店(使用PAPI_SR_INS):3282906465698128524578256419

c++ - 结构大小和内存布局取决于#pragma pack

考虑以下在VC++2010中编译的程序:#pragmapack(push,1)//1,2,4,8structstr_test{unsignedintn;unsignedshorts;unsignedcharb[4];};#pragmapack(pop)intmain(){str_teststr;str.n=0x01020304;str.s=0xa1a2;str.b[0]=0xf0;str.b[1]=0xf1;str.b[2]=0xf2;str.b[3]=0xf3;unsignedchar*p=(unsignedchar*)&str;std::cout我在return0;行上设置断点并在

c++ - 如何将位图转换为内存中的 PIX?

Tesseract似乎不能很好地处理位图,它可以处理某些输入但会搞砸其他输入。同时在与之前相同但采用leptonica格式PIX的输入上表现良好。如何将内存中的位图转换为PIX?想到的一个想法是使用leptonica的pixReadMem():00724/*---------------------------------------------------------------------*00725*Readfrommemory*00726*---------------------------------------------------------------------*